﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIMCObjetoNegocio;

namespace SIMCRepositorio
{
    public interface IRepositorioCuenta
    {
        List<CuentaBancaria> BuscarLista(int p_IdPersona);

        CuentaBancaria BuscarCuentaPorId(int p_IdPersona, int p_IdCuenta);
    }

    public class RepositorioCuenta : Database, IRepositorioCuenta
    {
        public List<CuentaBancaria> BuscarLista(int p_IdPersona)
        {
            try
            {
                var query = from cuenta in Context.tes_cuentas
                            join valor in Context.cla_valores
                                on cuenta.cta_splaza equals valor.cav_scodigo
                            join deudor in Context.per_personas
                                on cuenta.cta_ideudor equals deudor.per_icodigo
                            join acreedor in Context.per_personas
                                on cuenta.cta_iacreedor equals acreedor.per_icodigo
                            join tipocuenta in Context.tes_tipos_cuenta
                                on cuenta.cta_stp_cuenta equals tipocuenta.tct_scodigo
                            where cuenta.cta_ctp_gen == "1" &&
                                    cuenta.cta_iacreedor == p_IdPersona &&                                    
                                    valor.cav_satributo == Valores.PlazasCuentasBancarias
                            select new CuentaBancaria
                            {
                                Id = cuenta.cta_inumero,
                                Persona_ID1 = cuenta.cta_ideudor,
                                Persona_ID2 = cuenta.cta_iacreedor,
                                Persona_Nombre1 = deudor.per_sncorto,
                                Persona_Nombre2 = acreedor.per_sncorto,
                                Divisa = cuenta.cta_sdivisa,
                                TipoDeCuenta = cuenta.cta_stp_cuenta,
                                TipoDeCuentaDesc = tipocuenta.tct_sdescripcion,
                                FechaConciliacion = cuenta.cta_fconciliacion,
                                SaldoConciliado = cuenta.cta_msaldo_con,
                                CuentaContablePersona1 = cuenta.cta_scuenta1,
                                CuentaContablePersona2 = cuenta.cta_scuenta2,
                                Observaciones = cuenta.cta_snotas,
                                NumeroEnBanco = cuenta.cta_snumero,
                                Plaza = cuenta.cta_splaza,
                                PlazaNombre = valor.cav_sdescripcion,
                                VerificadaConBanco = cuenta.cta_cint_individual == "1" ? true : false,
                                ExentaIDB = cuenta.cta_cforma_canc == "1" ? true : false,
                                _TipoGenerico = cuenta.cta_ctp_gen,
                                _EstadoActividad = cuenta.cta_cstatus
                            };

                return query.ToList();

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public CuentaBancaria BuscarCuentaPorId(int p_IdPersona, int p_IdCuenta)
        {
            try 
            {

                var query = from cuenta in Context.tes_cuentas
                            join valor in Context.cla_valores
                                on cuenta.cta_splaza equals valor.cav_scodigo
                            join deudor in Context.per_personas
                                on cuenta.cta_ideudor equals deudor.per_icodigo
                            join acreedor in Context.per_personas
                                on cuenta.cta_iacreedor equals acreedor.per_icodigo
                            join tipocuenta in Context.tes_tipos_cuenta
                                on cuenta.cta_stp_cuenta equals tipocuenta.tct_scodigo
                            where cuenta.cta_ctp_gen == "1" &&
                                    cuenta.cta_iacreedor == p_IdPersona &&
                                    cuenta.cta_inumero == p_IdCuenta &&
                                    valor.cav_satributo == Valores.PlazasCuentasBancarias
                            select new CuentaBancaria
                            {
                                Id = cuenta.cta_inumero,
                                Persona_ID1 = cuenta.cta_ideudor,
                                Persona_ID2 = cuenta.cta_iacreedor,
                                Persona_Nombre1 = deudor.per_sncorto,
                                Persona_Nombre2 = acreedor.per_sncorto,
                                Divisa = cuenta.cta_sdivisa,
                                TipoDeCuenta = cuenta.cta_stp_cuenta,
                                TipoDeCuentaDesc = tipocuenta.tct_sdescripcion,
                                FechaConciliacion = cuenta.cta_fconciliacion,
                                SaldoConciliado = cuenta.cta_msaldo_con,
                                CuentaContablePersona1 = cuenta.cta_scuenta1,
                                CuentaContablePersona2 = cuenta.cta_scuenta2,
                                Observaciones = cuenta.cta_snotas,
                                NumeroEnBanco = cuenta.cta_snumero,
                                Plaza = cuenta.cta_splaza,
                                PlazaNombre = valor.cav_sdescripcion,
                                VerificadaConBanco = cuenta.cta_cint_individual == "1" ? true : false,
                                ExentaIDB = cuenta.cta_cforma_canc == "1" ? true : false,
                                _TipoGenerico = cuenta.cta_ctp_gen,
                                _EstadoActividad = cuenta.cta_cstatus
                            };
                
                return query.SingleOrDefault();                

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
